home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
GFA basic training.adf
/
SpriteEditor
/
SPRITEEDITOR.GFA
(
.txt
)
< prev
next >
Wrap
GFA-BASIC Amiga
|
1989-06-01
|
22KB
|
407 lines
GFA-AMIGAB
COPYBUFFER
SL_SPR
SLOT1
DATEI
YM UEBERGABE
SPIEGEL
S_ZEILE
S_TAUSCH
BERGABE
LOESCH
AUSSCHNITT
ANI_SPR
EDIT_SPR
SPR_ZEILE
AUSY1
ROT_POS GRUEN_POS
BLAU_POS
AKTIVE
Z_START
FARBEX
ZEILE
ACTIVE
N_POS
INITDIM
BILDAUF
EDITOR_MASKE
HAUPT_VERZWEIGUNG
BILDZU
ZEIG_FARBBOXWAHL
SLIDERSETZEN
EDIT_RASTER
ROLL_L
SLOT_INC
AUSS_RAUF_RUNTER
WAHL_SLOT_SETZEN
ROLL_R
SLOT_DEC
FARB_ED
MENU_LINKS
MENU_RECHTS
CLEAR_SPRITE
DISK ANIMATION
SPRITE_COPY
MIRROR
BLOCK_SETZEN
SPIEGELN
SPRITE_IN_RASTER
NACHRICHT_LOESCHEN
SLOT_TASTE_LESEN
AKTUELLEFARBE
AUSSCHNITT_BOX
NACHRICHT_L
SCHEN
COLOR
Dummy zur Garbage Collection
Spriteeditor V1.8 vom 20.02.89 von Thomas Knab
r das Buch-Kapitel SpriteED und Programmoptimierung des Buches
"GFA-Basic V3.0 Programmierung auf AMIGA"
Incl. Copy, Spiegel, Auf- Abw
rts-Ausschnitten, Rechts-Links-Rollen, 4 Farben,
und 26-Bilder-Animation. Spritegr
sse: 16x32 Pixel
Bit-Scan Routinen optimiert von Frank Ostrowski 15.02.89
Das Kopf- und Hauptprogramm:
Initialisierung Ende und Hauptschleife:
Ende des Programms und Speicherfreigabe:
Routinen:
Initialisierung von Arrays, Screen/Window auf- bzw.
zumachen und Editor-Maske malen
Komplette Sprite Animation - 26 Slots
Je eine Spritezeile als String und als Langwortvariable
Blitter-Farbbl
cke f
r GET und PUT:
3 User Farben
Alle Spritefelder mit Null f
llen (sonst "SPRITEFEHLER")
8-Farben-Screen
Titel als Normalschrift (nicht Revers!)
Fullwindow mit Activate
Anfangsfarben werden gesetzt
Slider & Malfarbe setzen
&SpriteED:GFA-Basic V3.0 ProgrammierungF
Hier folgen die Quadrate f
r die verschiedenen Farben im Malraster
Ausschnittsbox begrenzen
Malfarbe f
r Bildmaske setzen
Das Malraster wird erstellt mit 16 Zeilen, 16 Spalten
Das Transparent-BOB
Spritebox zur Darstellung
Sprite:Fu
Up-Down Scrollbox
AusschnittsF
Startzeile:F
Aktives Animations-Sprite & Darstellungsposition
AnimateFt
Slot NrFt
Rollboxen rechts und links
L-Rollen-RF
Aktive Slot-Nummer f
r Animation (Wahl)
Dreieck f
r plus
Texte f
r aktiven Slot
Slot F
Dreieck f
r minus
Die Farb-Sliderboxen
FarbeinstellungFo
3 Slider Boxen: Rot,Gr
n,Blau
als Grundfarben
Aktuelle Farbwahl-Boxen
Farben:F
Auswahlmen
CLEARF
COPYF
LOADF
SAVEF
ANIMATEF
SPIEGELF
EXIT Box
EXITF
USER-Nachrichten-Box
Slider-Sprites setzen (Schieber)
Farbauswahl-Boxen setzen (Schwarz)
Anfangswert f
r Selektion setzen
Hauptverzweigung abh
ngig von Mausposition
berhaupt eine Maustaste gedr
ckt ?
x-Position
y-Position
nach y-Ausw
hlen (1.Ast)
Diese 4 Proceduren haben direkte Aufgaben:
nach x-Ausw
hlen (1.Ast)
Direkt verzweigen
Ebenfalls direkt verzweigen
Direkt verzweigen
Nach Ausschnitt verzweigen
Slot-Nummer direkt abfragen
Direkt verzweigen
Direkt verzweigen
chste x-orientierte Auswahl (Bildschirmh
lfte)
Diese Prozedur wird ebenfalls direkt angesprungen:
Diese zwei Proceduren verzweigen weiter:
EXIT-BOX gedr
ckt ? => Sicherheitsabfrage
Sprite ED Verlassen ?!
JA,RAUS|ZURUECK!
Weiterverzweigende Proceduren
Ebenfalls hier die schnelle SELECT-Abfrage
Clear ausgew
hlt und anspringen
Load gew
hlt und ebenfalls verzweigen
! Flag, ob laden oder saven
Animate Selected und dorthin verzweigen
Copy Sprite ausgew
Speichern Sprites gew
Spiegeln Sprite
Eigentliche Hauptroutinen
Direkte Proceduren
Zeile ermitteln Mausposition-10 = Anfang des Rasters
Division durch 8 (Raster-Abstand) ist gleich dem 'Bit-Shift-Rechts' 3 mal (2 hoch 3 = 8)
Spalte ermitteln (genauso wie oben)
Aktuellen Colorblock im Raster setzen
Werte dem Sprite-Slot
bergeben abh
ngig von aktiver Farbe
Transparent ? dann alle Bits dieser Position l
schen!
Jetzt sind die neuen Daten bereit zur
bergabe
Es werden nur die ver
nderten Daten eingef
Spritefarbe setzen (nur Sprite #6):
In dieser Routine bleiben, solange der Mausknopf gedr
ckt ist
Farbeinstellung mit 3 interaktiven Slidern
Im Slider ROT ?
Vor der alten Position
Der oben erw
hnte Achter-Schritt
Farbwert erh
Neue Sliderposition setzen
hinter der alten Position
Farbwert erniedrigen
Neue Sliderposition
Wie oben f
Und ebenfalls f
r Blau
Im Bereich der Farbboxwahl ?
Farbboxwahl - Radio-Buttons
Hintergrundfarbe
Alten Rahmen l
schen
! L
schflag setzen
Farbe 1
Farbnummer setzen f
r alle Routinen
! L
schflag sicherheitshalber l
schen
Farbe 2
Farbnummer setzen
Und Farbe 3
Nun die aktuelle Farbe in Boxwahl & Sprite aktualisieren
Keine Farbe setzen oder die Maustaste wurde losgelassen = Exit
Letzter Slot erreicht ?
Aktive Farbe retten
Slot hochz
Alte Nummer im Kasten l
schen
Neue dort schreiben
Sprite darstellen
und ins Malraster
bertragen
Gerettete Farbe zur
ckschreiben
Nullter Slot erreicht ?
Slot runterz
"Slot # bitte ZWEISTELLIG eingeben F
Test auf Wertgrenze
!Slot # nicht gr
sser als 2x ! Fb
und zwischenspeichern
Einerstelle dazuaddieren
!Slot # nicht gr
sser als 25 ! Fb
Angew
hlten Slot ausgeben
Zum aktuellen Slot machen
Im Sprite
und im Malraster darstellen
Sprite zum Bearbeiten holen...
ROR die einzelnen Worte (wegen Farben) aufgeteilt in obere + untere 16 Bits
CARD wegen der Besonderheit des ROR&
(Kopiert Bit 15 in Bits 16 bis 31!)
Oberes Wort + Unteres Wort
Und in den aktuellen Sprite kopieren:
Darstellen und ins Raster:
ROL wird genauso behandelt wie ROR (siehe dort...)
Unter-Prozeduren aus menu_rechts und menu_links
Da die Sprites eventuell im FILESELECT-Requester stehen k
nnen werden sie unten rechts versteckt:
Jetzt wird das dk!-Flag getestet, ob geladen oder gespeichert werden soll:
Die DO-LOOP Schleife ist nur f
r das EXIT IF TRUE, damit bei
FILESELECT-Abbruch sowie bei Irrtum-Wahl abgebrochen werden kann
Sprite Laden (.SPR)!
Laden!
KEINE SPRITE DATEI!F
Raus bei Irrtum
Farbtabelle laden
Radio-Button setzen
Farb-Slider f
r aktive Farbe richtig setzen (versteckte Sprites
wieder auf die richtige Position bringen
Slider auf Farbe0 setzen
Sprite-Daten laden
Den nullten Sprite aktivieren und ins Spritefenster setzen
sowie die neue Slot-Nummer bekanntgeben
Versteckte Sprites wieder richtig positionieren:
Und im Malraster den aktuellen Ausschnitt darstellen
Nachricht schicken, da
alles ok und fertig ist
Geladen wurde
Auf jeden Fall raus
FF" Speicher-Flag?
Sprite Speichern!
Speichern!
SPRITES NICHT GESPEICHERT !Fe
.SPRFN
.SPRF
Farben Speichern mit Extension 'SPRC'
Sprite-Sequenz als gesamtes Speichern
OK Nachricht ausgeben:
Gespeichert in
Jetzt werden alle versteckten Sprites wieder
auf die richtige Position gesetzt:
Auf jeden Fall rauskommen...
Soll ein SPrite aus oder in den Buffer kopiert werden ?
"COPY SPRITE (IN) ODER (AUS) BUFFERF
Um eine Reaktion erwarten zu k
nnen, eine Pause:
und warten auf Mausklick:
Dann verzweige erst auf, in oder aus:
"SPRITE # IM BUFFER ! F
OK, dann kopiere aktuellen Sprite in Buffer:
Und teile es dem Benutzer mit:
Kopiere Buffer in den aktuellen Sprite
"BUFFER NACH SPRITE # KOPIERT F
Und stelle es im Malraster dar:
Abbruch durch RECHTE Maustaste oder durch falsches Anklicken:
COPY ABGEBROCHEN!F
flag! RESET:
15 Zeilen
und 15 Spalten des Malrasters
werden gel
scht:
Jetzt wird die Spritezeile gel
scht und auf Null gesetzt
Beide W
rter, darum:
Und die Sprites:
Aktuellen Slot mit Nullen
berschreiben und l
schen:
Dargestellten Sprite aktualisieren: als gel
schten (transparenten)
Sprite darstellen
Hier wird die Obergrenze festgelegt:
Pause, damit der Benutzer den Wechsel verfolgen kann
Momentane Sequenznummer schreiben:
Und darstellen:
Nach Animate aktuellen Slot wieder bereitstellen
Aktiven Sprite-Slot in das Zeilen-Langwort-Array kopieren
32 Zeilen Spiegeln ...
Der Spiegelroutine
bergeben..
... und in Sprite-Slot
bergeben
in den Sprite-Slot darstellen
den aktuellen Sprite-Ausschnitt in der Malbox zeichnen
Die Hilfs- und Unterroutinen
Spiegel-Zwischen-Variable l
schen:
Aktuelle Spritezeile einer Hilfsvariablen
bergeben
Wenn Bit gesetzt ist, setze es in
.. der Langwortvariablen spiegelverkehrt
und diese Operation ebenfalls f
r das obere Datenwort
Und spiegel% enth
lt die korrekten Spritezeilen-Daten,
um damit weiterzuarbeiten
Farbe oder l
schen ?
Wenn gel
scht werden soll, setze durchsichtigen Block
Ansonsten die aktuelle Farbe
Vom Sprite-Slot$ nach 4Byte-Wert r
berschieben
Sprite steht f
r die Bildwiedergabe jetzt in den Spritezeilen verkehrt
Positionen der Bits und deren Farbwerte ermitteln
Auch "scannen" genannt..
16 Zeilen bei 16 Spalten sind 256 Positionen
Rasterstartzeile
Nur den aktuellen Spriteausschnitt darstellen:
Rasterstartspalte
r Bildschirm-Darstellung spiegeln
Ist die zu bearbeitende Zeile leer (d.h. KEIN Bit gesetzt)?
Oberes Spritewort in zweite Hilfsvariable
bernehmen:
Hier wird die aktuelle Farbe errechnet und gePUTet..
chste Rasterposition in der Zeile:
Hier wird die Zeile mit der Hintergrundfarbe gef
also im Sprite KEIN BIT gesetzt (transparent)
chste Rasterzeile
Aktuelle Farbe in angew
hlte Box setzen ...
SETCOLOR in Farbe 5,6, oder 7...
Aktive, neu gesetzte Farbe aktivieren:
Und Box mit neuer Farbe malen:
Farbe f
r alles andere wieder zur
cksetzen
Neue Farbe ebenfalls dem Sprite mitteilen (SPRITE #6):
Fn
Farbwert ermitteln (X= AND mit max. m
glichen Farbwert)
Zum relativen Byte-Wert umrechnen (x1=SHR x,(R:8,G:4,B:0))
dann Position anpassen in achter Schritten:
x2=(x1*8)=(SHL x1,3) plus dem Slideranfang (+8)
Die zusammengerechneten SHIFTungen ergeben f
Rot:SHR(x2,5); Gr
n:SHR(x2,1); Blau:SHL(x2,3)
Zusammengefa
t werden diese Programmzeilen daraus:
Und die errechneten Slider-Positionen setzen
Angew
hlte Box einrahmen bzw. Rahmen l
schen
In dieser Schleife bleiben, bis die Maustaste losgelassen wurde
Soll der Ausschnitt unter oder
ber dem alten sein?
Neuen Ausschnitt dem Malraster
bergeben
Alte Ausschnittbox l
schen
ber oder unter dem alten Ausschnitt
Im Erlaubten Maximal-Wert-Bereich ?
OK, dann Zeiger und Boxkoordinaten hochz
Im erlaubten Minimal-Wert-Bereich ?
OK, dann Boxkoordinaten runterz
Dann neue Ausschnittbox malen